package com.lyj.stuelasticsearch.utils;

public class StringConverter {
    /**
     * 将下划线命名转换为驼峰命名
     * @param underscoreStr 下划线格式的字符串
     * @return 驼峰格式的字符串
     */
    public static String underscoreToCamelCase(String underscoreStr) {
        if (underscoreStr == null || underscoreStr.isEmpty()) {
            return underscoreStr;
        }

        StringBuilder result = new StringBuilder();
        // 将字符串全部转为小写，避免大小写不一致的问题
        String lowerCaseStr = underscoreStr.toLowerCase();
        boolean nextUpper = false;

        for (int i = 0; i < lowerCaseStr.length(); i++) {
            char currentChar = lowerCaseStr.charAt(i);

            if (currentChar == '_') {
                nextUpper = true;
            } else {
                if (nextUpper) {
                    result.append(Character.toUpperCase(currentChar));
                    nextUpper = false;
                } else {
                    // 第一个字符保持小写
                    if (i == 0) {
                        result.append(Character.toLowerCase(currentChar));
                    } else {
                        result.append(currentChar);
                    }
                }
            }
        }

        return result.toString();
    }

    public static void main(String[] args) {
        // 测试用例
        String[] testCases = {
                "user_name",       // 常规情况
                "USER_NAME",       // 全大写
                "firstName",       // 已经是驼峰
                "_private_field",  // 以下划线开头
                "alreadyCamel",    // 已经是驼峰
                "ABC_DEF_GHI",    // 多个连续大写
                "",                // 空字符串
                null               // null
        };

        for (String testCase : testCases) {
            System.out.printf("原始: %-20s 转换后: %s%n",
                    testCase, underscoreToCamelCase(testCase));
        }
    }
}